package com.hospital.service.impl;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.hospital.dao.MedicineDao;
import com.hospital.dto.MedicineDto;
import com.hospital.dto.MedicineUserDto;
import com.hospital.entity.Medicine;
import com.hospital.service.intf.MedicineService;
import com.hospital.util.StringUtil;
import com.hospital.vo.PageBean;
import com.hospital.vo.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @author csh
 * @date 2022/8/28
 */
@Service
public class MedicineServiceImpl implements MedicineService {
    @Autowired
    private MedicineDao dao;
    @Override
    public R add(Medicine medicine) {
        if(dao.add(medicine)>0){
            return R.ok();
        }else {
            return R.fail();
        }
    }

    @Override
    public R delete(Integer id) {
        if(dao.delete(id)>0){
            return R.ok();
        }else {
            return R.fail();
        }
    }


    @Override
    public R update(Medicine medicine) {
        if(dao.update(medicine)>0){
            return R.ok();
        }else {
            return R.fail();
        }
    }

    @Override
    public PageBean selectPage(String name, int page, int limit) {
        if(StringUtil.isNotEmpty(name)){
            name="%"+name+"%";
        }
        int start=(page-1)*limit;
        //查询总条数
        long count = dao.selectCount(name);
        //查询本页的数据
        List list =dao.selectPage(name,start,limit);
        return PageBean.ok(count,list);
    }

    //模糊查询所有的药品
    @Override
    public PageBean pageByInfo(String effect, int page, int limit) {
        if(StringUtil.isNotEmpty(effect)){
            effect="%"+effect+"%";
        }
        int start=(page-1)*limit;

        return PageBean.ok(dao.countByInfo(effect),dao.pageByInfo(effect,start,limit));

    }

    @Override
    public PageBean page(String mname, int page, int limit) {
        if(mname!=null){
            mname="%"+mname+"%";
        }
        int start=(page-1)*limit;
        System.out.println(mname);
        return PageBean.ok(dao.count(mname),dao.page(mname,start,limit));

    }

    @Override
    public R deleteId(int[] id) {
        if(dao.deleteId(id)>0){
            return R.ok();
        }else {
            return R.fail();
        }
    }

    @Override
    public List<MedicineDto> all() {
        return dao.all();
    }

    @Override
    public List<MedicineUserDto> all2() {
        return dao.all2();
    }

    @Override
    public R upload(MultipartFile file) throws IOException {
        //1.接收文件， 获取文件内容
        //1.验证上传文件是否存在
        if(!file.isEmpty()){
            //2.解析Excel -EasyExcel
            //2.解析Excel数据
            List<Medicine> list= EasyExcel.read(file.getInputStream(),Medicine.class, new ReadListener() {
                @Override
                public void invoke(Object o, AnalysisContext analysisContext) {
                }
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                }
            }).sheet().doReadSync();
            System.err.println(list.size());
            System.err.println(list);
            list.forEach(System.out::println);
            //3.Mybatis 实现批量新增
            if(dao.saveBatch(list)>0){
                return R.ok();
            }
        }
        return R.fail();
    }

}
